/*
 * operacionesIO.h
 *
 *  Created on: 22/09/2011
 *      Author: utn_so
 */

#ifndef OPERACIONESIO_H_
#define OPERACIONESIO_H_
#define _XOPEN_SOURCE 600
#include "interfaz.h"
#include <fcntl.h>
#include <stdint.h>


int32_t AbrirArchivoFd (char **pathFatFile);
FILE* AbrirArchivoDiscoStream(int32_t fd);
int32_t LeerSector (stPedido *pedido, char **pathFatFile);
int32_t EscribirSector (stPedido *pedido, char **pathFatFile);


int32_t ejecutarPedido (char **algoritmo,char **pathFatFile,
						stNodoPedido **listaPedidos,chs datosConfig,
						chs **posicionActual,int32_t delayLectura,
						int32_t delayEscritura,int32_t socketRaid,
						stNodoSincro **listaSincro, long *contSincro,
						int32_t estoySincronizado, int32_t *contadorEjecutar,
						int32_t *agregadosEjecutar,stNodoPedido **listaEjecutar
						, int32_t *sentidoGiro, sem_t *semaforoContador,
						int32_t hayqueloguear);
void inicializarListaPedidos();
void sacarNodoListaPedidos (stPedido *pedido,stNodoPedido **listaPedidos);

void testing (char *pathFatFile);

void atenderPedidos(void *arg);
float obtenerSeekTime(float rpm,float sectoresTotales);

void liberarListaSincro (stNodoSincro **listaSincro);

void RellenarListaEjecucion(stNodoPedido **listaPedidos,stNodoPedido **listaEjecutar,
							int32_t *agregadosEjecutar, int32_t estoySincronizado, stNodoSincro **listaSincro,
							sem_t *semaforoContador);
void liberarListaPedidos (stNodoPedido **listaPedidos);

char* recorroListaPedidosSSTF(stNodoPedido **listaPedidos,chs datosConfig);
void loguearSSTF (stPedido *pedido,stNodoPedido **listaPedidos,chs datosConfig,
					chs **posicionActual);

void loguearNSTEPSCAN (stPedido *pedido,stNodoPedido **listaEjecutar,chs datosConfig,
					chs **posicionActual, int32_t *sentidoGiro,stNodoPedido **listaPedidos);

char* recorroListaPedidosNSTEP(stNodoPedido **listaEjecutar,stNodoPedido **listaPedidos,chs datosConfig);

#endif /* OPERACIONESIO_H_ */
